package game.graph;

import game.model.Juego;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import biblioes.Archivos;

/**
 * Clase Frame del tablero, contiene dos paneles, uno con el tablero en si, y otro
 * con el menu de opciones como guardar la partida y salir.
 *
 */

public class TableroFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	
	private TableroGrafico bp;
	
	/**
	 * Constructor de la clase, recibe un juego, ya que en varias momentos del 
	 * juego necesita una referencia al mismo.
	 * 
	 * @param juego juego que se esta corriendo.
	 */
	
	public TableroFrame(Juego juego) {
		setTitle("Juego en ejecucion");
		setLayout(null);
		setVisible(true);
		setLocation(500,300);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		setSize(juego.getTablero().getDimensiones().y * 30 + 40, juego.getTablero().getDimensiones().x * 30 + 80);
		iniciarPanel(juego);
		iniciarMenu();
	}
	
	/**
	 * Aca se inicializa el panel del tablero y ya lo dibuja en pantalla.
	 * 
	 * @param juego juego que se esta corriendo.
	 */
	
	public void iniciarPanel(Juego juego) {

		bp = new TableroGrafico(juego, this);
		bp.setBackground(Color.WHITE);
		bp.setGridColor(Color.GRAY);
		bp.setListener(bp);
		bp.dibujar(juego.getTablero());

		add(bp);
	}
	
	/**
	 * Aca se inicializa el menu con las opciones que figuran en la parte superior
	 * del tablero. Guardar y salir.
	 * 
	 */
	
	public void iniciarMenu() {
		JMenuBar barra = new JMenuBar();
		barra.setBounds(0, 0, 10, 1);
		
		JMenu archivo = new JMenu("Archivo");
		archivo.setMnemonic(KeyEvent.VK_F);
		
		JMenuItem guardar = new JMenuItem("Guardar");
		guardar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser selector = new JFileChooser("./guardados");
				selector.setApproveButtonText("Save");
				selector.showSaveDialog(TableroFrame.this);
				File archivo = selector.getSelectedFile();
				
				try {
					if(archivo != null) {
						String[] paths = archivo.getPath().split("/");
						String path = paths[paths.length - 2];
					
						if(path.equals("archivos")) {
							throw new IllegalAccessException();
						}
						Archivos.guardarArchivo(bp.verJuego(), archivo);
					}
				} catch (Exception e1) {
					String mensaje = "<html>Problemas al guardar el archivo" +
					 				 "<br>Intente otro directorio</html>";
					new MensajeFrame(mensaje);
				}
			}
		});

		JMenuItem salir = new JMenuItem("Salir");
		salir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
			}
		});
		archivo.add(guardar);
		archivo.add(salir);
		barra.add(archivo);
		this.setJMenuBar(barra);
	}
	
}
